\subsubsection{A felület működési elve}

Már a prototípus implementációjakor felkészültünk az MVC minta megvalósítására. Ennek érdekében az osztályokat \verb+model+, \verb+view+ és \verb+controller+ csomagokba rendeztük. Olyan rendszert készítettünk, amelyben a konzolos megjelenítési felületet könnyen le lehet cserélni grafikusra. 

Az egyes csomagokba tartozó osztályok közös felelősségei:

\begin{itemize}
	\item \verb+model+: Az analízis lépésben megalkotott modell osztályai. Feladatuk a játék logikájának működtetése.
	\item \verb+view+: A játék megjelenítésére szolgáló osztályok. 
	\item \verb+controller+: A felhasználó interakciót biztosító osztályok. Ezeknek is van konzolra és grafikus felület specializált változatuk (előbbit a prototípusban alkalmaztuk).
\end{itemize}

A felület működési alapelvét tekintve \emph{kaszkád} és \emph{pull}
megvalósítású. Újrarajzoláskor a view csak az útelemeken iterál végig, és
megkéri az adott objektum osztályához tartozó rajzolót, hogy rajzolja azt újra.
Az útelemeken lévő szabályok, csomagolók és járművek pedig kaszkád módon tovább
vannak hívva, hogy ugyanígy jelenjenek meg. Ezzel meg van oldva, hogy helyes
sorrendben rajzolódjanak egymásra az objektumok, vagyis nem fordulhat
például elő, hogy egy járműre utólag rárajzolódik egy útelem vagy egy szabály.
A következő kaszkád hívás előtt mindig elmentődik az aktuális transzformációs
mátrix, majd a visszatéréskor visszatöltődik. Így az objektumrajzolók mindig
referencia koordinátarendszerben jelenítik meg az objektumokat, függetlenül
attól, hogy éppen ,,hol'' helyezkednek el a pályán.


\subsubsection{A felület osztály-struktúrája}
\begin{center}
	\includegraphics[width=1.0\textwidth]{graphic_classdiagram.pdf}
\end{center}
